МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра автоматики та телемеханіки
Курсова робота
з курсу: „Методи та засоби криптографічних перетворень”
на тему: “Симетричні та асиметричні методи зашифрування інформації”
Львів – 2005
Зміст
Завдання 1
Теоретичні відомості
Вибір ключа
Блок-схема алгоритму
Список ідентифікаторів
Текст програми
Відкритий текст
Результат зашифрування
Завдання 2
Теоретичні відомості
Вибір ключа
Зашифрування
Розшифрування
Висновок
Завдання 1
Вибрати ключі та розробити програму для за шифрування файлу даних заданим афінним шифром. Тип афінного шифру визначається останньою цифрою i НЗК. Об‘єм алфавіту визначається передостанньою цифрою j НЗК і дорівнює .
i
i mod 6
Тип афінного шифру
j
Розрядність алфавіту
Об‘єм алфавіту
4
4
Лінійний -го порядку
4
9
512
Теоретичні відомості
Афінні шифри- підклас шифрів заміни, що включає, як частковий випадок шифр Віжінера і навіть шифр перестановки з фіксованим періодом.
N-символьний алфавіт ототожнюємо з кільцем . А саме кожна буква замінюється своїм номером у алфавіті, причому нумерація починається з нуля. Наприклад, латинська абетка ототожнюється із , а українська із . Літера а української абетки трактується як нуль, літера б як 1, в як 2. Тепер до букв відкритого тексту ми можемо вільно застосовувати операцію додавання та множення за відповідним модулем.
Лінійний шифр.
Ключі: a таке, що , .
Шифрування. У повідомлені кожна буква заміщується буквою .
Дешифрування. У криптотексті кожна буква заміщуються буквою ,де .
Афінні шифри вищих порядків.
Для розширення попереднього методу потрібно щоб вони оперували з -грамами для довільного .
Для реалізації лінійного шифру -го порядку необхідно -граму (стовпець з елементів) вхідних символів помножити на матрицю-ключ .
Ключ. .
Шифрування. Повідомлення розбивається на -грами. Кожна -грама заміщується -грамою .
Дешифрування. Кожна -грама заміщується -грамою , де , де є дешифруючим ключем.
Вибір ключів
Блок-схема алгоритму
Список ідентифікаторів
Ідентифікатори
Призначення
const int a[2][2]
Ключ
const int n=512
Розмір алфавіту
FILE *fin
Вхідний файл
FILE *fout
Зашифрований файл
int eoffin
Прапорець кінця файлу
int x_OK
Прапорець готовності прочитаного символа
int x_OK
Прапорець готовності зашифрованого символа
unsigned long buf1
Вхідний буфер (32 біти)
unsigned long buf2
Вихідний буфер (32 біти)
unsigned long x
Проміжний символ (9 біт)
unsigned long x1[2]
Вхідний масив символів
unsigned long x2[2]
Вихідний масив символів
int c1
Лічильник непрочитаних бітів вхідного буфера
int c2
Лічильник незаповнених бітів вихідного буфера
int c4
Лічильник символів для реалізації блокового шифрування
Текст програми
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
const int a[2][2]={{103, 199}, {203, 123}}, n=512;
void main(void)
{
char *str;
FILE *fin, *fout;
int eoffin=0, x_OK=1, x_OK1;
unsigned long buf1, buf2 = 0, x, x1[2], x2[2];
int c1=32, c2=32, c4=0, i;
if ( (fin=fopen("c:\\file.pl", "rb")) == NULL )
{
printf("cannot open the file data.fb");
getch();
exit(1);
}
else
if ( (fout=fopen("c:\\file.enc", "wb")) == NULL )
{
printf("cannot open the file data.fbc");
getch();
exit(1);
}
else
{
if (fread(&buf1, 1, 4, fin) != 0)
while (!eoffin)
{
if (c1<=0)
{
if (fread(&buf1, 1, 4, fin) != 0)
{
x |= (buf1 << (9+c1)) & 511;
buf1 >>= (-c1);
c1 += 32;
x_OK = 1 & !(c1==32);
}
else
{
eoffin = 1;
x_OK = 1;
}
}
else
{
x = buf1 & 511;
buf1 >>= 9;
c1 -= 9;
x_OK = 1 & (c1>=0);
}
/*--------------------------------*/
if (x_OK)
{
x1[c4]=x;
if (c4==2)
{
for(i=0;i<2;i++)
{
x2[i]=(unsigned int)fmod((a[i][0]*x1[0]+a[i][1]*x1[1]), n);
itoa(x2[i], s...